package com.ruoyi.common.core.domain.entity.system;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;

import java.util.Date;

/**
 * 小程序订单对象 sys_order
 *
 * @author zjw
 * @date 2023-08-09
 */
public class SysOrder extends BaseEntity {
    private static final long serialVersionUID = 1L;

    /**
     * 订单id
     */
    private Long orderId;

    /**
     * 商户订单编号
     */
    @Excel(name = "商户订单编号")
    private String outOrderNo;

    /**
     * 微信订单编号
     */
    @Excel(name = "微信订单编号")
    private String wxOrderNo;

    /**
     * 商户退款单号
     */
    @Excel(name = "商户退款单号")
    private String outRefundNo;

    /**
     * 微信退款单号
     */
    @Excel(name = "微信退款单号")
    private String wxRefundNo;

    /**
     * 景区id
     */
    @Excel(name = "景区id")
    private Long scenicId;

    /**
     * 码头id
     */
    @Excel(name = "码头id")
    private Long wharfId;

    /**
     * 船只id
     */
    @Excel(name = "船只id")
    private Long boatId;

    /**
     * 订单类型。0：计时收费订单，1：套餐收费订单，2：拼团订单。
     */
    @Excel(name = "订单类型。0：计时收费订单，1：套餐收费订单，2：拼团订单。")
    private int orderType;

    /**
     * 计时收费规则id。默认为0。
     */
    @Excel(name = "计时收费规则id。默认为0。")
    private int jishiId;

    /**
     * 套餐类型id。默认为0。
     */
    @Excel(name = "套餐类型id。默认为0。")
    private int taocanId;

    /**
     * 拼团类型id。默认为0。
     */
    @Excel(name = "拼团类型id。默认为0。")
    private int pintuanId;

    /**
     * 订单状态。0：待付款，1：待使用，2：使用中，3: 已关闭，4：已完成
     */
    @Excel(name = "订单状态")
    private int orderStatus;

    /**
     * 订单状态文本描述。0：待付款，1：待使用，2：使用中，3: 已关闭，4：已完成
     */
    private String orderStatusDesc;

    /**
     * 订单文本描述，示例：计时计费订单-押金。
     */
    @Excel(name = "订单文本描述，示例：计时计费订单-押金。")
    private String orderDesc;

    /**
     * 退款文本描述，示例：用户超时未上船，系统主动退款。
     */
    @Excel(name = "退款文本描述，示例：用户超时未上船，系统主动退款。")
    private String refundDesc;

    /**
     * 订单费用金额，单位：元。
     */
    @Excel(name = "订单费用金额，单位：元。")
    private double orderFee;

    /**
     * 订单费用支付状态。0：未支付，1：支付中，2：已支付，3：退款中，4：已退款
     */
    @Excel(name = "订单费用支付状态。0：未支付，1：支付中，2：已支付，3：退款中，4：已退款")
    private int feePayStatus;

    /**
     * 订单费用支付状态文本描述。0：未支付，1：支付中，2：已支付，3：退款中，4：已退款
     */
    private String feePayStatusDesc;

    /**
     * 实际支付的订单费用金额，单位：元。
     */
    @Excel(name = "实际支付的订单费用金额，单位：元。")
    private double realPayFee;

    /**
     * 订单押金金额，单位：分。
     */
    @Excel(name = "订单押金金额，单位：分。")
    private double orderDeposit;

    /**
     * 订单押金支付状态。0：未支付，1：支付中，2：已支付，3：退款中，4：已退款
     */
    @Excel(name = "订单押金支付状态。0：未支付，1：支付中，2：已支付，3：退款中，4：已退款")
    private int depositPayStatus;

    /**
     * 订单押金支付状态文本描述。0：未支付，1：支付中，2：已支付，3：退款中，4：已退款
     */
    private String depositPayStatusDesc;

    /**
     * 实际支付的订单押金金额，单位：元。
     */
    @Excel(name = "实际支付的订单押金金额，单位：元。")
    private double realPayDeposit;

    /**
     * 订单总金额(订单费用+押金)，单位：元。
     */
    @Excel(name = "订单总金额(订单费用+押金)，单位：分。")
    private double orderTotalPrice;

    /**
     * 用户实际支付的订单总金额(订单费用+押金)，单位：分。
     */
    @Excel(name = "用户实际支付的订单总金额(订单费用+押金)，单位：分。")
    private double realPayTotalPrice;

    /**
     * 订单费用的支付方式。0：未支付，1：微信支付，2：支付宝，3：银行卡。
     */
    @Excel(name = "订单费用的支付方式。0：未支付，1：微信支付，2：支付宝，3：银行卡。")
    private int feePayMethod;

    /**
     * 订单费用支付方式的文字描述。如：“微信零钱支付”等。
     */
    @Excel(name = "订单费用支付方式的文字描述。如：“微信零钱支付”等。")
    private String feePayMethodDesc;

    /**
     * 订单押金的支付方式。0：未支付，1：微信支付，2：支付宝，3：银行卡。
     */
    @Excel(name = "订单押金的支付方式。0：未支付，1：微信支付，2：支付宝，3：银行卡。")
    private int depositPayMethod;

    /**
     * 订单押金支付方式的文字描述。如：“微信零钱支付”等。
     */
    @Excel(name = "订单押金支付方式的文字描述。如：“微信零钱支付”等。")
    private String depositPayMethodDesc;

    /**
     * 退款金额，单位：元。
     */
    @Excel(name = "退款金额，单位：元。")
    private double refundAmount;

    /**
     * 退款失败原因。
     */
    private String refundFailReason;

    /**
     * 订单所属的用户id。
     */
    @Excel(name = "订单所属的用户id。")
    private Long userId;

    /**
     * 订单开始时间(开始计费时间)。
     */
    private Date beginTime;
    /**
     * 订单关闭时间(结束计费时不代表订单关闭，可能存在结束计费当还有待支付费用，在待支付费用结清前订单不能关闭)。
     */
    private Date closedTime;

    public String getRefundFailReason() {
        return refundFailReason;
    }

    public void setRefundFailReason(String refundFailReason) {
        this.refundFailReason = refundFailReason;
    }

    public Date getBeginTime() {
        return beginTime;
    }

    public void setBeginTime(Date beginTime) {
        this.beginTime = beginTime;
    }

    public Date getClosedTime() {
        return closedTime;
    }

    public void setClosedTime(Date closedTime) {
        this.closedTime = closedTime;
    }

    /**
     * 订单实际持续时长的毫秒值。
     */
    @Excel(name = "订单实际持续时长的毫秒值。")
    private Long realDuration;

    public String getOrderStatusDesc() {
        return orderStatusDesc;
    }

    public void setOrderStatusDesc(String orderStatusDesc) {
        this.orderStatusDesc = orderStatusDesc;
    }

    public String getFeePayStatusDesc() {
        return feePayStatusDesc;
    }

    public void setFeePayStatusDesc(String feePayStatusDesc) {
        this.feePayStatusDesc = feePayStatusDesc;
    }

    public String getDepositPayStatusDesc() {
        return depositPayStatusDesc;
    }

    public void setDepositPayStatusDesc(String depositPayStatusDesc) {
        this.depositPayStatusDesc = depositPayStatusDesc;
    }

    /**
     * 订单结束时间。
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "订单结束时间。", width = 30, dateFormat = "yyyy-MM-dd")
    private Date endTime;

    public void setOrderId(Long orderId) {
        this.orderId = orderId;
    }

    public Long getOrderId() {
        return orderId;
    }

    public void setOutOrderNo(String outOrderNo) {
        this.outOrderNo = outOrderNo;
    }

    public String getOutOrderNo() {
        return outOrderNo;
    }

    public void setWxOrderNo(String wxOrderNo) {
        this.wxOrderNo = wxOrderNo;
    }

    public String getWxOrderNo() {
        return wxOrderNo;
    }

    public void setOutRefundNo(String outRefundNo) {
        this.outRefundNo = outRefundNo;
    }

    public String getOutRefundNo() {
        return outRefundNo;
    }

    public void setWxRefundNo(String wxRefundNo) {
        this.wxRefundNo = wxRefundNo;
    }

    public String getWxRefundNo() {
        return wxRefundNo;
    }

    public void setScenicId(Long scenicId) {
        this.scenicId = scenicId;
    }

    public Long getScenicId() {
        return scenicId;
    }

    public void setWharfId(Long wharfId) {
        this.wharfId = wharfId;
    }

    public Long getWharfId() {
        return wharfId;
    }

    public void setBoatId(Long boatId) {
        this.boatId = boatId;
    }

    public Long getBoatId() {
        return boatId;
    }

    public void setOrderType(int orderType) {
        this.orderType = orderType;
    }

    public int getOrderType() {
        return orderType;
    }

    public void setJishiId(int jishiId) {
        this.jishiId = jishiId;
    }

    public int getJishiId() {
        return jishiId;
    }

    public void setTaocanId(int taocanId) {
        this.taocanId = taocanId;
    }

    public int getTaocanId() {
        return taocanId;
    }

    public void setPintuanId(int pintuanId) {
        this.pintuanId = pintuanId;
    }

    public int getPintuanId() {
        return pintuanId;
    }

    public void setOrderStatus(int orderStatus) {
        this.orderStatus = orderStatus;
    }

    public int getOrderStatus() {
        return orderStatus;
    }

    public void setOrderDesc(String orderDesc) {
        this.orderDesc = orderDesc;
    }

    public String getOrderDesc() {
        return orderDesc;
    }

    public void setRefundDesc(String refundDesc) {
        this.refundDesc = refundDesc;
    }

    public String getRefundDesc() {
        return refundDesc;
    }

    public void setOrderFee(double orderFee) {
        this.orderFee = orderFee;
    }

    public double getOrderFee() {
        return orderFee;
    }

    public void setFeePayStatus(int feePayStatus) {
        this.feePayStatus = feePayStatus;
    }

    public int getFeePayStatus() {
        return feePayStatus;
    }

    public void setRealPayFee(double realPayFee) {
        this.realPayFee = realPayFee;
    }

    public double getRealPayFee() {
        return realPayFee;
    }

    public void setOrderDeposit(double orderDeposit) {
        this.orderDeposit = orderDeposit;
    }

    public double getOrderDeposit() {
        return orderDeposit;
    }

    public void setDepositPayStatus(int depositPayStatus) {
        this.depositPayStatus = depositPayStatus;
    }

    public int getDepositPayStatus() {
        return depositPayStatus;
    }

    public void setRealPayDeposit(double realPayDeposit) {
        this.realPayDeposit = realPayDeposit;
    }

    public double getRealPayDeposit() {
        return realPayDeposit;
    }

    public void setOrderTotalPrice(double orderTotalPrice) {
        this.orderTotalPrice = orderTotalPrice;
    }

    public double getOrderTotalPrice() {
        return orderTotalPrice;
    }

    public void setRealPayTotalPrice(double realPayTotalPrice) {
        this.realPayTotalPrice = realPayTotalPrice;
    }

    public double getRealPayTotalPrice() {
        return realPayTotalPrice;
    }

    public void setFeePayMethod(int feePayMethod) {
        this.feePayMethod = feePayMethod;
    }

    public int getFeePayMethod() {
        return feePayMethod;
    }

    public void setFeePayMethodDesc(String feePayMethodDesc) {
        this.feePayMethodDesc = feePayMethodDesc;
    }

    public String getFeePayMethodDesc() {
        return feePayMethodDesc;
    }

    public void setDepositPayMethod(int depositPayMethod) {
        this.depositPayMethod = depositPayMethod;
    }

    public int getDepositPayMethod() {
        return depositPayMethod;
    }

    public void setDepositPayMethodDesc(String depositPayMethodDesc) {
        this.depositPayMethodDesc = depositPayMethodDesc;
    }

    public String getDepositPayMethodDesc() {
        return depositPayMethodDesc;
    }

    public void setRefundAmount(double refundAmount) {
        this.refundAmount = refundAmount;
    }

    public double getRefundAmount() {
        return refundAmount;
    }

    public void setUserId(Long userId) {
        this.userId = userId;
    }

    public Long getUserId() {
        return userId;
    }

    public void setRealDuration(Long realDuration) {
        this.realDuration = realDuration;
    }

    public Long getRealDuration() {
        return realDuration;
    }

    public void setEndTime(Date endTime) {
        this.endTime = endTime;
    }

    public Date getEndTime() {
        return endTime;
    }

    @Override
    public String toString() {
        return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
                .append("orderId", getOrderId())
                .append("outOrderNo", getOutOrderNo())
                .append("wxOrderNo", getWxOrderNo())
                .append("outRefundNo", getOutRefundNo())
                .append("wxRefundNo", getWxRefundNo())
                .append("scenicId", getScenicId())
                .append("wharfId", getWharfId())
                .append("boatId", getBoatId())
                .append("orderType", getOrderType())
                .append("jishiId", getJishiId())
                .append("taocanId", getTaocanId())
                .append("pintuanId", getPintuanId())
                .append("orderStatus", getOrderStatus())
                .append("orderDesc", getOrderDesc())
                .append("refundDesc", getRefundDesc())
                .append("orderFee", getOrderFee())
                .append("feePayStatus", getFeePayStatus())
                .append("realPayFee", getRealPayFee())
                .append("orderDeposit", getOrderDeposit())
                .append("depositPayStatus", getDepositPayStatus())
                .append("realPayDeposit", getRealPayDeposit())
                .append("orderTotalPrice", getOrderTotalPrice())
                .append("realPayTotalPrice", getRealPayTotalPrice())
                .append("feePayMethod", getFeePayMethod())
                .append("feePayMethodDesc", getFeePayMethodDesc())
                .append("depositPayMethod", getDepositPayMethod())
                .append("depositPayMethodDesc", getDepositPayMethodDesc())
                .append("refundAmount", getRefundAmount())
                .append("userId", getUserId())
                .append("realDuration", getRealDuration())
                .append("createTime", getCreateTime())
                .append("endTime", getEndTime())
                .append("remark", getRemark())
                .toString();
    }
}
